import logging

from flask import g
from flask import request
from flask import session, jsonify

from info.models import User, News, Category
from info.utlis.commons import user_login_data
from info.utlis.response_code import RET
from . import index_blue
from info import redis_store
from  flask import current_app,render_template


@index_blue.route('/newslist')
def news_list():
    cid = request.args.get("cid","1")
    page = request.args.get("page","1")
    per_page = request.args.get("per_page","10")

    #2.参数类型转换
    try:
        page = int(page)
        per_page = int (per_page)
    except Exception as e:
        page = 1
        per_page = 10
    #3.分页查询
    #判断新闻的分类是否为1
    try:
        """
        if cid == "1":
            paginate = News.query.filter().order_by(News.create_time.desc()).paginate(page,per_page,False)
        else:
            paginate = News.query.filter(News.category_id == cid).order_by(News.create_time.desc()).paginate(page,
                                                                                                            per_page,
                                                                                                             False)
        """
        #改装用法判断
        filters = [News.status == 0]

        if cid != "1":
            filters.append(News.category_id == cid)
        paginate = News.query.filter(*filters).order_by(News.create_time.desc()).paginate(page, per_page, False)


    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR,errmsg="获取新闻失败")

    #4.获取分页对象中的属性，总页数，当前页，当前页的对象列表
    totalPage = paginate.pages
    currentPage = paginate.page
    items = paginate.items

    #5.将对象列表转成字典列表
    news_list = []
    for news in items:
        news_list.append(news.to_dict())

    #6.携带数据，返回响应
    return jsonify(errno=RET.OK,errmsg="获取新闻成功",totalPage=totalPage,currentPage=currentPage,newsList=news_list)



@index_blue.route('/',methods=["GET","POST"])
@user_login_data
def hello_world():

    # #1.获取用户的登陆信息
    # user_id = session.get('user_id')
    #
    # #2.通过user——id取出用户对象
    # user = None
    # if user_id:
    #     try:
    #         user = User.query.get(user_id)
    #     except Exception as e:
    #         current_app.logger.error(e)

    #3.查询热门新闻，根据店家ing，查询前十天新闻
    try:
        news = News.query.order_by(News.clicks.desc()).limit(10).all()
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR,errmsg="获取新闻失败")

    #4.将新闻对象列表转成字典列表
    news_list = []
    for item in  news:
        news_list.append(item.to_dict())

    #5.查询所有的分类数据
    try:
        categories = Category.query.all()
    except Exception as e:
        current_app.logger.error(e)
        jsonify(errno=RET.DBERR,errmsg="获取分类失败")

    #6.将分类的对象列表转成字典列表
    category_list = []
    for category in categories:
        category_list.append(category.to_dict())

    #3.拼接用户数据，渲染页面
    data = {
        "user_info":g.user.to_dict() if g.user else "",
        "news_list":news_list,
        "category_list":category_list
    }

    return render_template("news/index.html",data = data)

@index_blue.route('/favicon.ico')
def get_web_logo():

    return current_app.send_static_file('news/favicon.ico')

#统一的返回404页面
@index_blue.route('/404')
@user_login_data
def page_not_found():
    data = {
        "user_info":g.user.to_dict() if g.user else ""
    }

    return render_template("news/404.html",data=data)
